home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 5 / Amiga Tools 5.iso / tools / developer-tools / andere sprachen / oberonv4 / oberon-src / system / amigados.mod (.txt) < prev    next >
Encoding:
Oberon Text  |  1995-10-29  |  8.1 KB  |  314 lines

  1. Syntax10.Scn.Fnt
  2. Syntax10b.Scn.Fnt
  3. MODULE AmigaDos; (*shml/cn 24-May-1993 *)
  4. IMPORT
  5.     SYSTEM, A:=AmigaBase,E:=AmigaExec, U := AmigaUtility;
  6. CONST
  7.     beginning*=-1;
  8.     dosName*="dos.library";
  9.     end*=1;
  10.     newFile*=1006;
  11.     oldFile*=1005;
  12.     readWrite*=1004;
  13.     objectInUse*=202;
  14.     renameAcrossDevices*=215;
  15.     same*=0;
  16.     sharedLock*=-2;
  17.     ticksPerSecond*=50;
  18.     globalOnly*=8;
  19.     binaryVar*=10;
  20.     dontNullTerm*=11;
  21.     saveVar*=12;
  22.     protDelete*=0;
  23.     protExecute*=1;
  24.     protWrite*=2;
  25.     protRead*=3;
  26.     protArchive*=4;
  27.     protPure*=5;
  28.     protScript*=6;
  29.         Some Pointer without their records
  30.     CommandLineInterfacePtr=LONGINT;
  31.     ProcessId=LONGINT;
  32.     Date*=RECORD
  33.         days*:LONGINT;
  34.         minute*:LONGINT;
  35.         tick*:LONGINT;
  36.     END;
  37.     FileHandlePtr*=LONGINT; (* NOTE: This is a BPTR *)
  38.     FileLockPtr*=LONGINT; (* NOTE: This is a BPTR *)
  39.     FileInfoBlock*=RECORD
  40.         diskKey*:LONGINT;
  41.         dirEntryType*:LONGINT;
  42.         fileName*:ARRAY 108 OF CHAR;
  43.         protection*:SET;
  44.         entryType*:LONGINT;
  45.         size*:LONGINT;
  46.         numBlock*:LONGINT;
  47.         date*:Date;
  48.         comment*:ARRAY 80 OF CHAR;
  49.         ownerUID*:INTEGER;
  50.         ownerGID*:INTEGER;
  51.         reserved*:ARRAY 32 OF CHAR;
  52.     END;
  53.     FileInfoBlockPtr*=LONGINT;
  54.     Process*=RECORD
  55.         task*:E.Task;
  56.         msgPort*:E.MsgPort;
  57.         pad*:INTEGER;
  58.         segList*:LONGINT;
  59.         stackSize*:LONGINT;
  60.         globVec*:LONGINT;
  61.         taskNum*:LONGINT;
  62.         stackBase*:LONGINT;
  63.         result2*:LONGINT;
  64.         currentDir*:FileLockPtr;
  65.         cis*:FileHandlePtr;
  66.         cos*:FileHandlePtr;
  67.         consoleTask*:ProcessId;
  68.         fileSystemTask*:ProcessId;
  69.         cli*:CommandLineInterfacePtr;
  70.         returnAddr*:LONGINT;
  71.         pktWait*:LONGINT;
  72.         windowPtr*:LONGINT;
  73.         homeDir*:FileLockPtr;
  74.         flags*:SET;
  75.         exitCode*:LONGINT;
  76.         exitData*:LONGINT;
  77.         arguments*:LONGINT;
  78.         localVars*:E.MinList;
  79.         shellPrivate*:LONGINT;
  80.         ces*:FileHandlePtr;
  81.     END;
  82. CONST
  83.     sysDummy*=U.user+32;
  84.     sysInput*=sysDummy+1;
  85.     sysOutput*=sysDummy+2;
  86.     sysASynch*=sysDummy+3;
  87.     sysUserShell*=sysDummy+4;
  88.     sysCustomShell*=sysDummy+5;
  89.     npDummy*=U.user+1000;
  90.     npCloseOutput*=npDummy+7;
  91.     dosBase:LONGINT;
  92.     dosVersion-:INTEGER;
  93. PROCEDURE AddPart*(VAR dir:ARRAY OF CHAR; filename:ARRAY OF CHAR; size:LONGINT):BOOLEAN;
  94.     r:A.Regs;
  95. BEGIN
  96.     r.d[1]:=SYSTEM.ADR(dir);
  97.     r.d[2]:=SYSTEM.ADR(filename);
  98.     r.d[3]:=size;
  99.     A.LibCall(dosBase,-882,r);
  100.     RETURN r.d[0]#0;
  101. END AddPart;
  102. PROCEDURE Close*(file:FileHandlePtr):BOOLEAN;
  103.     r:A.Regs;
  104. BEGIN
  105.     r.d[1]:=file;
  106.     A.LibCall(dosBase,-36,r);
  107.     RETURN r.d[0]#0;
  108. END Close;
  109. PROCEDURE CurrentDir*(lock: FileLockPtr):FileLockPtr;
  110.     r:A.Regs;
  111. BEGIN
  112.     r.d[1]:=lock;
  113.     A.LibCall(dosBase,-126,r);
  114.     RETURN r.d[0];
  115. END CurrentDir;
  116. PROCEDURE DateStamp*(VAR date:Date);
  117.     r:A.Regs;
  118. BEGIN
  119.     r.d[1]:=SYSTEM.ADR(date);
  120.     A.LibCall(dosBase,-192,r);
  121. END DateStamp;
  122. PROCEDURE Delay*(w: LONGINT);
  123.     r:A.Regs;
  124. BEGIN
  125.     r.d[1]:=w;
  126.     A.LibCall(dosBase, -198, r);
  127. END Delay;
  128. PROCEDURE DeleteFile*(name:ARRAY OF CHAR):BOOLEAN;
  129.     r:A.Regs;
  130. BEGIN
  131.     r.d[1]:=SYSTEM.ADR(name);
  132.     A.LibCall(dosBase,-72,r);
  133.     RETURN r.d[0]#0;
  134. END DeleteFile;
  135. PROCEDURE DupLockFromFH*(fh:FileHandlePtr):FileLockPtr;
  136.     r:A.Regs;
  137. BEGIN
  138.     r.d[1]:=fh;
  139.     A.LibCall(dosBase,-372,r);
  140.     RETURN r.d[0];
  141. END DupLockFromFH;
  142. PROCEDURE Examine*(lock:FileLockPtr; VAR info:FileInfoBlock):BOOLEAN;
  143. (* NOTE: info has to be longword aligned. *)
  144.     r:A.Regs;
  145. BEGIN
  146.     r.d[1]:=lock;
  147.     r.d[2]:=SYSTEM.ADR(info);
  148.     A.LibCall(dosBase,-102,r);
  149.     RETURN r.d[0]#0;
  150. END Examine;
  151. PROCEDURE FilePart*(VAR path, fileName: ARRAY OF CHAR);
  152. TYPE StrPtr = POINTER TO ARRAY 1 OF CHAR;
  153. VAR r:A.Regs; p
  154. : StrPtr;
  155. BEGIN
  156. [1]:=SYSTEM.ADR(path);
  157.     A.LibCall(dosBase,-870,r
  158.     p := SYSTEM.VAL(StrPtr, r.d
  159. [0]);
  160.     COPY(p^, fileName)
  161. END FilePart;
  162. PROCEDURE GetVar*(name:ARRAY OF CHAR; buffer:LONGINT; size:LONGINT; flags:SET):LONGINT;
  163.     r:A.Regs;
  164. BEGIN
  165.     r.d[1]:=SYSTEM.ADR(name);
  166.     r.d[2]:=buffer;
  167.     r.d[3]:=size;
  168.     r.d[4]:=SYSTEM.VAL(LONGINT,flags);
  169.     A.LibCall(dosBase,-906,r);
  170.     RETURN r.d[0];
  171. END GetVar;
  172. PROCEDURE IoErr*():LONGINT;
  173.     r:A.Regs;
  174. BEGIN
  175.     A.LibCall(dosBase,-132,r);
  176.     RETURN r.d[0];
  177. END IoErr;
  178. PROCEDURE Lock*(name:ARRAY OF CHAR; type:LONGINT):FileLockPtr;
  179.     r:A.Regs;
  180. BEGIN
  181.     r.d[1]:=SYSTEM.ADR(name);
  182.     r.d[2]:=type;
  183.     A.LibCall(dosBase,-84,r);
  184.     RETURN r.d[0];
  185. END Lock;
  186. PROCEDURE NameFromFH*(fh:FileHandlePtr; VAR name:ARRAY OF CHAR):BOOLEAN;
  187.     r:A.Regs;
  188. BEGIN
  189.     r.d[1]:=fh;
  190.     r.d[2]:=SYSTEM.ADR(name);
  191.     r.d[3]:=LEN(name);
  192.     A.LibCall(dosBase,-408,r);
  193.     RETURN r.d[0]#0;
  194. END NameFromFH;
  195. PROCEDURE NameFromLock*(lock:FileLockPtr; VAR name:ARRAY OF CHAR):BOOLEAN;
  196.     r:A.Regs;
  197. BEGIN
  198.     r.d[1]:=lock;
  199.     r.d[2]:=SYSTEM.ADR(name);
  200.     r.d[3]:=LEN(name);
  201.     A.LibCall(dosBase,-402,r);
  202.     RETURN r.d[0]#0;
  203. END NameFromLock;
  204. PROCEDURE Open*(name:ARRAY OF CHAR; accessMode:LONGINT):FileHandlePtr;
  205.     r:A.Regs;
  206. BEGIN
  207.     r.d[1]:=SYSTEM.ADR(name);
  208.     r.d[2]:=accessMode;
  209.     A.LibCall(dosBase,-30,r);
  210.     RETURN r.d[0];
  211. END Open;
  212. PROCEDURE Output*():FileHandlePtr;
  213.     r:A.Regs;
  214. BEGIN
  215.     A.LibCall(dosBase,-60,r);
  216.     RETURN r.d[0];
  217. END Output;
  218. PROCEDURE Read*(file:FileHandlePtr; VAR buffer:ARRAY OF SYSTEM.BYTE; length:LONGINT):LONGINT;
  219.     r:A.Regs;
  220. BEGIN
  221.     r.d[1]:=file;
  222.     r.d[2]:=SYSTEM.ADR(buffer);
  223.     r.d[3]:=length;
  224.     A.LibCall(dosBase,-42,r);
  225.     RETURN r.d[0];
  226. END Read;
  227. PROCEDURE Rename*(oldName,newName:ARRAY OF CHAR):BOOLEAN;
  228.     r:A.Regs;
  229. BEGIN
  230.     r.d[1]:=SYSTEM.ADR(oldName);
  231.     r.d[2]:=SYSTEM.ADR(newName);
  232.     A.LibCall(dosBase,-78,r);
  233.     RETURN r.d[0]#0;
  234. END Rename;
  235. PROCEDURE SameLock*(lock1,lock2:FileLockPtr):LONGINT;
  236.     r:A.Regs;
  237. BEGIN
  238.     r.d[1]:=lock1;
  239.     r.d[2]:=lock2;
  240.     A.LibCall(dosBase,-420,r);
  241.     RETURN r.d[0];
  242. END SameLock;
  243. PROCEDURE Seek*(file:FileHandlePtr; position,mode:LONGINT):LONGINT;
  244.     r:A.Regs;
  245. BEGIN
  246.     r.d[1]:=file;
  247.     r.d[2]:=position;
  248.     r.d[3]:=mode;
  249.     A.LibCall(dosBase,-66,r);
  250.     RETURN r.d[0];
  251. END Seek;
  252. PROCEDURE SetFileSize*(fh:FileHandlePtr; offset,mode:LONGINT):LONGINT;
  253.     r:A.Regs;
  254. BEGIN
  255.     r.d[1]:=fh;
  256.     r.d[2]:=offset;
  257.     r.d[3]:=mode;
  258.     A.LibCall(dosBase,-456,r);
  259.     RETURN r.d[0];
  260. END SetFileSize;
  261. PROCEDURE SetProtection*(name:ARRAY OF CHAR; mask:SET):BOOLEAN;
  262.     r:A.Regs;
  263. BEGIN
  264.     r.d[1]:=SYSTEM.ADR(name);
  265.     r.d[2]:=SYSTEM.VAL(LONGINT,mask);
  266.     A.LibCall(dosBase,-186,r);
  267.     RETURN r.d[0]#0;
  268. END SetProtection;
  269. PROCEDURE SetVar*(name:ARRAY OF CHAR; buffer:LONGINT; size:LONGINT; flags:SET):BOOLEAN;
  270.     r:A.Regs;
  271. BEGIN
  272.     r.d[1]:=SYSTEM.ADR(name);
  273.     r.d[2]:=buffer;
  274.     r.d[3]:=size;
  275.     r.d[4]:=SYSTEM.VAL(LONGINT,flags);
  276.     A.LibCall(dosBase,-900,r);
  277.     RETURN r.d[0]#0;
  278. END SetVar;
  279. PROCEDURE System*(command:ARRAY OF CHAR; VAR tagList:ARRAY OF U.TagItem):LONGINT;
  280.     r:A.Regs;
  281. BEGIN
  282.     r.d[1]:=SYSTEM.ADR(command);
  283.     r.d[2]:=SYSTEM.ADR(tagList);
  284.     A.LibCall(dosBase,-606,r);
  285.     RETURN r.d[0];
  286. END System;
  287. PROCEDURE UnLock*(lock:FileLockPtr);
  288.     r:A.Regs;
  289. BEGIN
  290.     r.d[1]:=lock;
  291.     A.LibCall(dosBase,-90,r);
  292. END UnLock;
  293. PROCEDURE Write*(file:FileHandlePtr; VAR buffer:ARRAY OF SYSTEM.BYTE; length:LONGINT):LONGINT;
  294.     r:A.Regs;
  295. BEGIN
  296.     r.d[1]:=file;
  297.     r.d[2]:=SYSTEM.ADR(buffer);
  298.     r.d[3]:=length;
  299.     A.LibCall(dosBase,-48,r);
  300.     RETURN r.d[0];
  301. END Write;
  302. PROCEDURE Init;
  303.     LibraryPtr=POINTER TO E.Library;
  304.     lib:LibraryPtr;
  305. BEGIN
  306.     dosBase:=E.OpenLibrary(dosName,37);
  307.     IF dosBase=0 THEN HALT(99) END;
  308.     lib:=SYSTEM.VAL(LibraryPtr,dosBase);
  309.     dosVersion:=lib.version;
  310. END Init;
  311. BEGIN
  312.     Init;
  313. END AmigaDos.
  314.